www.gusucode.com > VC++ 特殊网址访问器源代码-源码程序 > VC++ 特殊网址访问器源代码-源码程序/code/Demo3/CheckSetDlg.cpp

    // CheckSetDlg.cpp : implementation file
// Download by http://www.NewXing.com

#include "stdafx.h"
#include "Demo03.h"
#include "CheckSetDlg.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

//增加全局变量的引用声明
extern HWND	gs_hWnd;
/////////////////////////////////////////////////////////////////////////////
// CCheckSetDlg dialog


CCheckSetDlg::CCheckSetDlg(CWnd* pParent /*=NULL*/)
	: CDialog(CCheckSetDlg::IDD, pParent)
{
	//{{AFX_DATA_INIT(CCheckSetDlg)
	//原来的设定
	//m_bCheckPic = FALSE;
	//m_bCheckUrl = FALSE;
	//修改后的设定
	m_bCheckPic = TRUE;
	m_bCheckUrl = TRUE;
	//}}AFX_DATA_INIT
}


void CCheckSetDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CCheckSetDlg)
	DDX_Check(pDX, IDC_CHECK_PIC, m_bCheckPic);
	DDX_Check(pDX, IDC_CHECK_URL, m_bCheckUrl);
	//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(CCheckSetDlg, CDialog)
	//{{AFX_MSG_MAP(CCheckSetDlg)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CCheckSetDlg message handlers

void CCheckSetDlg::OnOK() 
{
	// TODO: Add extra validation here
	
	//CDialog::OnOK();
	//定义两个临时变量,保存原来的检测属性;
	BOOL	m_bTempCheckUrl = m_bCheckUrl;
	BOOL	m_bTempCheckPic = m_bCheckPic;
	UpdateData(TRUE);
	//如果检测属性发生变化,则发消息到CmainFrame,应用相应的变化
	if(m_bTempCheckUrl != m_bCheckUrl)
		::PostMessage(gs_hWnd,WM_SET_CHECK_URL,m_bCheckUrl,0);
	if(m_bTempCheckPic != m_bCheckPic)
		::PostMessage(gs_hWnd,WM_SET_CHECK_PIC,m_bCheckPic,0);
	AfxMessageBox("设定完成!");

	//	保存当前设定到注册表中:
	HKEY	hDir = 0 ;
	char	strStatus[10] = {'\0'};

	//打开注册表
	if( RegOpenKeyEx(HKEY_LOCAL_MACHINE,
		"SOFTWARE\\Demo03",
		NULL,
		KEY_ALL_ACCESS,
		&hDir) == ERROR_SUCCESS)
	{
		//如果打开注册表项成功,则直接添加键值
		wsprintf(strStatus,"%2d",(int)m_bCheckUrl);
		RegSetValueEx(hDir,"bIsCheckUrl",0,REG_SZ,(CONST BYTE *)strStatus,sizeof(strStatus));			
		wsprintf(strStatus,"%2d",(int)m_bCheckPic);
		RegSetValueEx(hDir,"bIsCheckPic",0,REG_SZ,(CONST BYTE *)strStatus,sizeof(strStatus));			
		RegCloseKey(hDir);
	}
	else
	{
		//打开项失败,创建该项
		RegCreateKey(
			HKEY_LOCAL_MACHINE, 
			"SOFTWARE\\Demo03",
			&hDir
			);
		wsprintf(strStatus,"%2d",(int)m_bCheckUrl);
		RegSetValueEx(hDir,"bIsCheckUrl",0,REG_SZ,(CONST BYTE *)strStatus,sizeof(strStatus));			
		wsprintf(strStatus,"%2d",(int)m_bCheckPic);
		RegSetValueEx(hDir,"bIsCheckPic",0,REG_SZ,(CONST BYTE *)strStatus,sizeof(strStatus));			
		RegCloseKey(hDir);
	}
	CDialog::OnOK();
}

BOOL CCheckSetDlg::OnInitDialog() 
{
	CDialog::OnInitDialog();
	
	// TODO: Add extra initialization here
	//定义相关变量
	HKEY	hDir = 0 ;
	BYTE	strStatus[10];
	DWORD	dwType = REG_SZ;
	DWORD	dwSize = sizeof(strStatus);

	//初始化strStatus
	memset(strStatus,0,dwSize);

	//打开注册表
	if( RegOpenKeyEx(HKEY_LOCAL_MACHINE,
		"SOFTWARE\\Demo03",
		NULL,
		KEY_ALL_ACCESS,
		&hDir) == ERROR_SUCCESS)
	{
		//如果打开注册表项成功,获取键值,赋初值
		if(	RegQueryValueEx(	hDir,
								"bIsCheckUrl",
								NULL,
								&dwType,
								strStatus,
								&dwSize	) == ERROR_SUCCESS )
		{
			//memcpy(strNum2,strNum,sizeof(strNum2));
			m_bCheckUrl = (BOOL)atoi((char *)strStatus);
		}
		else
		{
			m_bCheckUrl = TRUE;		//默认为启动检测
		}
		if(	RegQueryValueEx(	hDir,
								"bIsCheckPic",
								NULL,
								&dwType,
								strStatus,
								&dwSize	) == ERROR_SUCCESS )
		{
			//memcpy(strNum2,strNum,sizeof(strNum2));
			m_bCheckPic = (BOOL)atoi((char *)strStatus);
		}
		else
		{
			m_bCheckPic = TRUE;		//默认为启动检测
		}
		RegCloseKey(hDir);
	}
	else
	{
		//如果打开注册表项失败,给默认值.
		m_bCheckUrl = TRUE;
		m_bCheckPic = TRUE;
	}
	//将设定应用到对话框控件中
	UpdateData(FALSE);

	return TRUE;  // return TRUE unless you set the focus to a control
	              // EXCEPTION: OCX Property Pages should return FALSE
}